package main

import (
	"fmt"
)
func main() {
   
  //下标/索引: 对字符串中的每个字符进行编号,从0开始
  s1 := "hello 世界"
  //访问字符串中的字符,通过下标/索引访问
  //字符型:通过单引号缀[]获取字符
  fmt.Println(s1[0])
  // s2 := 'h'
  // 字节bite可以存储所有的英文字符编码
  // bite还会在二进制数据中用到
   var s2 byte = 'h' //uint8 0~255
  // 直接输出字符,输出的是字符的ASCII码
  fmt.Println(s2) //104
  // 输出字符对应的ASCII码
  fmt.Printf("%d\n", s2) //104
  // 输出字符对应的ASCII码对应的字符
  // go语言中默认是用UTF-8编码,一个汉字占用3个字节,一个字符占用1个字节
  //rune专门用于存储中文编码,等价于int32
  var char rune = '世'
  fmt.Printf("%c\n", char) 
  // %c 提供的是一个字符编码,替换后得到字符编码对应的字符
  fmt.Printf("%c\n", s2) //h
  
  //截取字符串
  //字符串是不可变的,不能通过下标/索引修改字符串中的字符
  //5~9 s1[开始下标:结束下标]
  //左闭右开,从5开始,到9结束,不包含9,包含开始,不包含结束
  fmt.Println(s1[5:9]) //世界
  // 从0开始
  fmt.Println(s1[:5]) //hello
  // 到结尾
  fmt.Println(s1[5:]) //世界
  // 从0开始到结尾
  fmt.Println(s1[:]) //hello 世界
   
  //字符串拼接  
  // 1. + 拼接
  fmt.Println(s1 + "hello") //hello 世界hello
  // 2. fmt.Sprintf() 拼接
  fmt.Println(fmt.Sprintf("%s%s", s1, "hello")) //hello 世界hello 
  // s2 + s3

}